package czhcontroller

import (
	"Cgo/common"
	"Cgo/front/models"

	"github.com/gin-gonic/gin"
)

func CzhHotelController(r *gin.RouterGroup) {
	r.GET("/getHotelByRegion", common.HandlerFunc(getHotelByRegion))
	r.GET("/getHotelById", common.HandlerFunc(getHotelById))
	r.GET("/getPriceByHotelId", common.HandlerFunc(getPriceByHotelId))
	r.GET("/getPriceByHotelIdNum", common.HandlerFunc(getPriceByHotelIdNum))
	r.POST("/addHotelOrder", common.HandlerFunc(addHotelOrder))
	r.GET("/getHotelOrderByUserId", common.HandlerFunc(getHotelOrderByUserId))
	r.GET("/getAllHotel", common.HandlerFunc(getAllHotel))
	r.POST("/editHotel", common.HandlerFunc(editHotel))
	r.POST("/addHotel", common.HandlerFunc(addHotel))
	r.POST("/removeHotel", common.HandlerFunc(removeHotel))
}

// @Summary 根据地区查询相关推荐酒店
// @Schemes
// @Description 根据地区查询相关推荐酒店
// @Tags czh前台接口
// @Param region query string true "地区"
// @Accept json
// @Produce json
// @Success 200 {object} common.RT[[]models.CzhHotel]
// @Router /front/czh/hotel/getHotelByRegion [get]
func getHotelByRegion(ctx *gin.Context) common.Result {
	region := ctx.Query("region")
	hotelList, err := HotelDao.GetHotelByRegion(region)
	if err != nil {
		return common.R.Fail("暂无地区相关推荐酒店")
	}
	return common.R.Success(hotelList)
}

// @Summary 根据id查询相关推荐酒店
// @Schemes
// @Description 根据id查询相关推荐酒店
// @Tags czh前台接口
// @Param id query string true "目的地id"
// @Accept json
// @Produce json
// @Success 200 {object} common.RT[models.CzhHotel]
// @Router /front/czh/hotel/getHotelById [get]
func getHotelById(ctx *gin.Context) common.Result {
	id := ctx.Query("id")
	hotel, err := HotelDao.GetHotelById(id)
	if err != nil {
		return common.R.Fail("暂无酒店信息")
	}
	return common.R.Success(hotel)
}

// @Summary 根据酒店id查询相关价格表
// @Schemes
// @Description 根据酒店id查询相关价格表
// @Tags czh前台接口
// @Param hotelId query string true "酒店id"
// @Accept json
// @Produce json
// @Success 200 {object} common.RT[[]models.CzhHotelPrice]
// @Router /front/czh/hotel/getPriceByHotelId [get]
func getPriceByHotelId(ctx *gin.Context) common.Result {
	hotelId := ctx.Query("hotelId")
	pricelList, err := HotelDao.GetPriceByHoetlId(hotelId)
	if err != nil {
		return common.R.Fail("暂无相关价格表")
	}
	return common.R.Success(pricelList)
}

// @Summary 根据酒店id以及入住人数查询相关价格表
// @Schemes
// @Description 根据酒店id以及入住人数查询相关价格表
// @Tags czh前台接口
// @Param hotelId query string true "酒店id"
// @Param num query string true "入住人数"
// @Accept json
// @Produce json
// @Success 200 {object} common.RT[[]models.CzhHotelPrice]
// @Router /front/czh/hotel/getPriceByHotelIdNum [get]
func getPriceByHotelIdNum(ctx *gin.Context) common.Result {
	hotelId := ctx.Query("hotelId")
	num := ctx.Query("num")
	pricelList, err := HotelDao.GetPriceByHoetlIdNum(hotelId, num)
	if err != nil {
		return common.R.Fail("暂无相关价格表")
	}
	return common.R.Success(pricelList)
}

// @Summary 酒店购买
// @Schemes
// @Description 酒店购买
// @Tags czh前台接口
// @Param hotelOrder body models.CzhHotelOrder true "购买信息"
// @Accept json
// @Produce json
// @Success 200 {object} common.RT[string]
// @Router /front/czh/hotel/addHotelOrder [post]
func addHotelOrder(ctx *gin.Context) common.Result {
	var hotelOrder models.CzhHotelOrder
	err := ctx.ShouldBindJSON(&hotelOrder)
	if err != nil {
		return common.R.Fail("参数错误")
	}
	err = HotelDao.AddHotelnOrder(hotelOrder.Name, hotelOrder.Userid, hotelOrder.Price, hotelOrder.Username, hotelOrder.People, hotelOrder.Coverimg, hotelOrder.Room, hotelOrder.Food)
	if err != nil {
		return common.R.Fail("购买失败")
	}
	return common.R.Success("购买成功")
}

// @Summary 根据用户id获取对应用户酒店订单信息
// @Schemes
// @Description 根据用户id获取对应用户酒店订单信息
// @Tags czh前台接口
// @Param userid query string true "用户id"
// @Accept json
// @Produce json
// @Success 200 {object} common.RT[[]models.CzhHotelOrder]
// @Router /front/czh/hotel/getHotelOrderByUserId [get]
func getHotelOrderByUserId(ctx *gin.Context) common.Result {
	userid := ctx.Query("userid")
	destinationOrderList, err := HotelDao.GetHotelOrderByUserId(userid)
	if err != nil {
		return common.R.Fail("暂无订单数据")
	}
	return common.R.Success(destinationOrderList)
}

// @Summary 获取所有酒店数据
// @Schemes
// @Description 获取所有酒店数据
// @Tags czh前台接口
// @Accept json
// @Produce json
// @Success 200 {object} common.RT[[]models.CzhHotel]
// @Router /front/czh/hotel/getAllHotel [get]
func getAllHotel(ctx *gin.Context) common.Result {
	allHotel, err := HotelDao.GetAllHotel()
	if err != nil {
		return common.R.Fail("暂无酒店数据")
	}
	return common.R.Success(allHotel)
}

// @Summary 酒店编辑
// @Schemes
// @Description 酒店编辑
// @Tags czh前台接口
// @Param hotel body models.CzhHotel true "酒店信息"
// @Accept json
// @Produce json
// @Success 200 {object} common.RT[string]
// @Router /front/czh/hotel/editHotel [post]
func editHotel(ctx *gin.Context) common.Result {
	var hotel models.CzhHotel
	err := ctx.ShouldBindJSON(&hotel)
	if err != nil {
		return common.R.Fail("参数错误")
	}
	err = HotelDao.HotelEdit(hotel.Id, hotel.Coverimg, hotel.Name, hotel.Score, hotel.Region, hotel.Phone, hotel.Address)
	if err != nil {
		return common.R.Fail("修改失败")
	}
	return common.R.Success("修改成功")
}

// @Summary 新增酒店
// @Schemes
// @Description 新增酒店
// @Tags czh前台接口
// @Param hotel body models.CzhHotel true "酒店信息"
// @Accept json
// @Produce json
// @Success 200 {object} common.RT[string]
// @Router /front/czh/hotel/addHotel [post]
func addHotel(ctx *gin.Context) common.Result {
	var hotel models.CzhHotel
	err := ctx.ShouldBindJSON(&hotel)
	if err != nil {
		return common.R.Fail("参数错误")
	}
	err = HotelDao.HotelAdd(hotel.Coverimg, hotel.Name, hotel.Score, hotel.Region, hotel.Phone, hotel.Address)
	if err != nil {
		return common.R.Fail("新增失败")
	}
	return common.R.Success("新增成功")
}

// @Summary 删除酒店
// @Schemes
// @Description 删除酒店
// @Tags czh前台接口
// @Param hotel body models.CzhHotel true "酒店信息"
// @Accept json
// @Produce json
// @Success 200 {object} common.RT[string]
// @Router /front/czh/hotel/removeHotel [post]
func removeHotel(ctx *gin.Context) common.Result {
	var hotel models.CzhHotel
	err := ctx.ShouldBindJSON(&hotel)
	if err != nil {
		return common.R.Fail("参数错误")
	}
	err = HotelDao.HotelRemove(hotel.Id)
	if err != nil {
		return common.R.Fail("删除失败")
	}
	return common.R.Success("删除成功")
}
